a. ファイル操作コマンド
1.ファイルのコピー[ cp ]
ファイルをコピーするコマンドは、cp です。以下は、file1 を file2という名前でコピーしています。
複数ファイルを一度にディレクトリにコピーするコマンドは、
$ cp file1 file2 file3 directory1 |
上書き時にバックアップファイルを作成する場合は、-b オプションを使用します。
$ cp -b file1 file2 |
$ ls |
file1 file2 file2~ |
file2~はコピー先に既に存在していたファイルのバックアップ。
バックアップ時に後ろにつける文字列は「~」だけではなく、指定することも可能です。--suffixオプションを使います。
$ $ cp -b --suffix=_$(date +%Y%m%d) file1 file2 |
$ ls |
file1 file2 file2_20220729 |
とすると、「_20220729」というように今日の日付を後ろにつけることができます。
ディレクトリごとコピーする場合は、-r オプションを使用します。
$ cp -r directory1 directory2 |
● cp コマンド構文
|
cp [オプション] [コピー元ファイル名・ディレクトリ名] [コピー先ファイル名・ディレクトリ名]
|
|
● cp コマンドオプション
|
-a |
ディレクトリ構造以外の全ての属性、構成を保持してコピーします。シンボリックリンクを指定した場合はシンボリックリンク自体をコピーします。指定した属性を保持してコピーを行い、umaskの設定を無視します。 |
|
-b[=作成方法] |
コピー時に上書きを行う場合、コピー先に存在するファイルのバックアップを作成します。バックアップファイルのファイル名の作成方法を指定します。指定する値を以下に示します。
t, numbered
元のファイル名の末尾に番号を振った拡張子を追加した名前をバックアップファイルのファイル名に使用します。
nil, existing
元のファイル名の末尾に番号を振った拡張子を付加した名前を持つバックアップファイルが存在する場合、番号をインクリメントして付加します。 |
|
-d |
ファイル名でシンボリックリンク(ディレクトリ・ファイルに別の名を設定し、その名前でアクセスできる仕組み)を指定した場合、指定されたシンボリックリンク自体をコピーします。 |
|
-f |
強制的に上書きをします。 |
|
-H |
ファイル名で指定されたシンボリックリンクを全て辿ります。 |
|
-i |
コピー先に同名ファイルがある場合、上書きするか確認する |
|
-l |
コピーを行うかわりにハードリンクの作成を行います。 |
|
-L |
ファイル名でシンボリックリンクを指定した場合、指定されたシンボリックリンク自体のコピーではなくシンボリックリンクが指し示しているファイル・ディレクトリのコピーを行います。 |
|
-p |
指定された属性を維持します。umaskを無視します。
パーミッションと所有者とタイムスタンプを保持する(--preserve=mode,ownership,timestamps相当)
--preserve[=属性リスト]
指定した属性を保持する。属性を指定しなかった場合は、mode(パーミッション)、ownership(所有者)、timestamps(タイムスタンプ)が保持される。その他、context(コンテキスト情報)、links(ディレクトリ内のハードリンク)、xattr(ファイルシステムの拡張属性)、all(可能な限り全ての属性)を指定可能 |
|
-P |
コピー元に指定したファイル名のパスにあわせてコピー先にディレクトリを作成し、作成されたディレクトリ内にコピーします。
コピー元のディレクトリ構造をそのままコピーする。(ディレクトリ作成も行う) |
|
-r , -R |
ディレクトリごと再帰的コピーする(ディレクトリを中身ごとコピーします。) |
|
-s |
コピーを行うかわりにシンボリックリンクの作成を行います。 |
|
-u |
コピー先に同一名称のファイルが存在した場合、既存のファイルがコピー元のファイルより古かった場合のみ上書きでコピーします。 |
|
-v |
経過を表示します。コピーされたファイルを表示します。 |
|
2.ファイルの移動/リネーム [ mv ]
mv コマンドは、ファイルを移動させる役割と、ファイル名の変更をする役割と2つの役割を果たします。以下は、file1 を public_html というディレクトリに移動します。なお、mv コマンドはオプションをつけずとも、ディレクトリごと移動させる事ができます。
以下例は、file1 という名前のファイルを、file2という名前にリネームしています。
● mv コマンド構文
|
mv [オプション] [移動元ファイル名・ディレクトリ名] [移動先ファイル名・ディレクトリ名]
|
|
● mv コマンドオプション
|
-i |
コピー先に同名ファイルがある場合、上書きするか確認する |
|
-v |
詳細表示 |
|
※ mvコマンドの注意点
ファイル・ディレクトリを移動するのに便利な「mv」コマンドですが、注意点もあります。
例えば、ファイルを移動する先のディレクトリが存在しなかった場合、エラーとならずにファイル名が指定したディレクトリ名に変更されてしまいます。
以下はfile1ファイルをdirectory1ディレクトリに移動しようとしたが、directory1ディレクトリが存在しなかった場合の例です。
$ ls -al |
-rw-r--r-- 1 test01 test01 113 7月 30 11:47 file1 |
$ mv file1 directory1 |
$ ls -al |
-rw-r--r-- 1 test01 test01 113 7月 30 11:48 directory1 |
directory1ディレクトリが存在しないとdirectory1という名称にファイル名が変わってしまいます。
そのため、この問題を解消するために、ディレクトリにファイルを移動する場合は、ディレクトリ名のあとに「/.」を付けてす。
「/.」を付加することで、そのディレクトリ直下にファイルを移動することを示すコマンドとなりますので、ディレクトリが存在しないと移動することはできません。
3.ディレクトリの作成 [ mkdir ]
ディレクトリを作成するには、mkdir(make direcotry)コマンドを実行します。
親ディレクトリが存在しない場合に、親ディレクトリも同時に作成するには、-p オプションを用います。以下例では、dir1
や dir2 というディレクトリが存在しなくても、dir3というディレクトリが作成されます。dir1やdir2も同時に作成される。
$ mkdir -p ./dir1/dir2/dir3 |
$ tree |
.
├── dir1
│ └── dir2
│ └── dir3 |
● mkdir コマンド構文
|
mkdir [オプション] [ディレクトリ名]
|
|
● mkdir コマンドオプション
|
-p |
親ディレクトリも同時に作成する |
|
-v |
詳細表示 |
|
4.空のディレクトリを削除する [ rmdir ]
ディレクトリ内にファイルが入っていない場合、rmdir で空のディレクトリを削除します。ディレクトリ内にファイルが存在する場合は、ディレクトリを削除する事はできません。以下は、ディレクトリ内にファイルが存在する場合に、削除できなかった旨を示すメッセージです。
# rmdir directory1/
rmdir: `directory1/': ディレクトリは空ではありません |
● rmdir コマンド構文
|
rmdir [オプション] [ディレクトリ名]
|
|
● rmdir コマンドオプション
|
-p |
親ディレクトリごと削除する。親ディレクトリ内も空でなければ削除できません。 |
|
5.ファイル/ディレクトリの削除 [ rm ]
ファイルやディレクトリを削除する場合には、rm コマンドを使用します。ファイルを削除する場合は、オプションをつけずに実行します。ディレクトリを削除する場合は、-r
オプションを付加します。
ディレクトリごと削除する際には、ディレクトリ内の中身も削除されるかどうかファイルごとに聞かれます。そのディレクトリ内に多くのファイルが存在する場合は、いちいち確認をとっていたのでは、面倒くさいので、ディレクトリを完全に削除してもよいという確信があるならば、-f
オプションを付け加えます。
● rm コマンド構文
|
rm [オプション] [ファイル名・ディレクトリ名]
|
|
● rm コマンドオプション
|
-r [ -R ] |
ディレクトリ内のファイルを再帰的に削除する |
|
-i |
削除の前に確認をとる |
|
-f |
確認をとらずに削除する |
|
-v |
詳細表示 |
|
6.ファイル/ディレクトリの詳細検索 [ find ]
find コマンドは、指定したディレクトリ以下のファイルやディレクトリを検索します。locate コマンドのようにデーターベースファイルは存在せず、コマンド実行時より検索しにいくため、ディスクアクセスが激しくなります。その代わり、locate
よりも詳細に目的のものを検索できるという利点があります。
以下例は、/etc ディレクトリ以下の conf というファイル名のファイルを検索しています。locate
コマンドと異なる点は、locate では、conf という文字列を含むファイルを全て列挙しましたが、find
コマンドの場合は、conf というファイル名をもつ完全一致のファイルが検索されます。もし、locate
コマンド風に検索するならば、find /etc -name *conf* となります。
$ find /etc -name
conf
/etc/log.d/conf |
次に、-atimeオプションをつけて最終アクセス日を基にして検索してみます。以下は、カレントディレクトリ内で最終アクセス日7日以内のファイルを検索します。+7
にすると、7日以上経過したファイルを検索するようになります。
以下の例は、アクセス権が755のファイルのみ検索します。
● find コマンド構文
|
find [パス・ディレクトリ] [オプション]
|
|
● find コマンドオプション
|
-name <文字列> |
文字列を含むファイルを検索 |
|
-atime <日数> |
最終アクセス日で検索 |
|
-mtime <日数> |
最終更新日で検索 |
|
-perm <アクセス権> |
8進数のアクセス権表記で検索 |
|
-size <サイズ> |
ブロック単位のファイルサイズで検索 |
|
-type |
ファイルタイプで検索 |
|
-user <ユーザ名> |
ファイルの所有者で検索 |
|
-empty <ファイル名> |
空の(容量が0バイト)のファイルやディレクトリを検索する |
|
なお、アクションとして、
-exec <コマンド> {} \; を指定する事で、検索結果のファイルにコマンドを実行する事ができるようになります。以下例は、容量が0バイトのファイルやディレクトリを検索し、削除するという意味になります。
$ find . -empty -exec
rm {} \; |
7.ファイルの中身を閲覧する [ cat ] [ more ] [ less ]
ファイルの中身を確認するには、cat コマンドを使用します。そのファイルの中身が一画面に収まりきれない場合、通常は、パイプ「 | 」を用いて more コマンドを実行します。パイプとは、標準出力を別のコマンドなどの標準入力として渡します。わかりやすく言えば、コマンドとコマンドを繋げるためのもので、ここでは、cat コマンドと more コマンドを繋げています。
パイプラインで繋げるのが面倒くさい場合は、直接、more コマンドを使用した方が便利です。なお、下にスクロールする際の挙動が異なるだけで、ほぼ同様の less コマンドも使用する事ができます。
$ more file1
$ less file1 |
● more, lessコマンドの操作法
|
SPACE |
1画面分スクロールし,次ページを表示 |
|
d
|
半画面分だけ画面がスクロール |
|
RET |
1行だけ画面がスクロール |
|
b |
1画面分バックスクロールし,前ページを表示 |
|
u |
半画面分バックスクロール(lessのみ) |
|
y |
1行だけ画面がバックスクロール( lessのみ) |
|
g |
ファイルの先頭へ移動( lessのみ) |
|
G |
ファイルの末尾へ移動( lessのみ) |
|
/文字列 |
指定した文字列をカーソル以降で検索 |
|
?文字列 |
指定した文字列をカーソル以前で検索 |
|
n |
文字列の再検索 |
|
h |
ヘルプを表示 |
|
q |
終了 |
|
-n オプションを付け加えると行番号つきでファイルの中身を表示します。
$ cat -n file1
1 aaa bbb ccc
2 ddd eee fff
3 ggg hhh iii |
cat は複数のファイルを指定すると、それらのファイルを結合して出力されます。以下の例では、file1 とfile2 が結合されて出力されます。
● cat コマンド構文
|
cat [オプション] [ファイル名]
|
|
● cat コマンドオプション
|
-n |
行番号つきで表示する |
|
-b |
空行を除いて、行番号つきで表示する |
|
8.ファイルの先頭部分を表示する [ head ]
ファイルの先頭部分を表示するには、head コマンドを使用します。デフォルトでは、ファイルの先頭行から数えて10行目までが表示されます。
$ head /home/sakura/public_html/index.php
<html>
<head>
<title>ServerArchitecture</title>
<meta http-equiv="Content-Type"
content="text/html; charset=EUC-JP">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div align="center">
iaaa
</div> |
ファイルの先頭行から30行目までを表示したい場合は、-30 のように数値で指定します。また、-n オプションを用いて、-n
30 と指定しても同様の意味になります。
$ head -30 /home/sakura/public_html/index.php |
● head コマンド構文
|
head [オプション] [ファイル名]
|
|
● head コマンドオプション
|
-c |
指定したバイト数だけファイルの先頭行から表示する |
|
-n |
指定した行数だけファイルの先頭行から表示する |
|
9.ファイルの末尾を表示する [ tail ]
syslog などのログファイルは、先頭から末尾に向かって記述されていくため、上から順に見ていくと下に辿りつくまでに疲れてしまいます。なので、ファイルの末尾から表示させるコマンドである、tail を活用しましょう。デフォルトでは、末尾の10行が表示されます。ファイルの末尾20行を表示したい場合は、tail -20 file1 のように指定します。なお、tail -n +20 file1 とした場合は、ファイルの20行目から末尾までを表示します。
● tail コマンド構文
|
tail [オプション] [ファイル名]
|
|
● tail コマンドオプション
|
-c |
指定したバイト数だけファイルの末尾から表示する |
|
-n |
指定した行数だけファイルの末尾から表示する |
|
10.ディレクトリ内のファイル及びディレクトリの情報を表示する [ ls ]
ディレクトリ内にどのようなファイル及びディレクトリが存在するかを確認するには、ls コマンドを使用します。引数にディレクトリを指定しない場合、カレントディレクトリの情報を表示します。
-l オプションを使用すると、ファイルの属性やファイルの所有者/グループなどの情報も得る事ができます。
# ls -l /var/log/messages
-rw------- 1 root root 97443 2月 2 13:29
/var/log/messages |
-F オプションを使用すると、実行ファイルに「* 」、ディレクトリに「/」、シンボリックリンクに「@」をつけて一覧表示するため、意外と重宝します。
● ls コマンド構文
|
ls [オプション]
|
|
● ls コマンドオプション
|
-a |
全てのファイルとディレクトリを表示する(. と .. を含む) |
|
-A |
全てのファイルとディレクトリを表示する(. と ..
を含まない) |
|
-C |
ファイルやディレクトリを複数列で一覧表示 |
|
-d |
ディレクトリの中身ではなく項目自身を表示 |
|
-F |
実行ファイルに「* 」、ディレクトリに「/」、シンボリックリンクに「@」をつけて一覧表示する。 |
|
-i |
ファイルに i-node 番号をつけて表示する |
|
-l |
ファイルのアクセス権やサイズを表示する |
|
-R |
サブディレクトリの内容も再帰的に一覧表示する |
|
11.カレントディレクトリの位置を確認する [ pwd ]
ディレクトリ内を cd コマンドでいったり来たりしていると、たまに自分がどこにいるのか見失う事があります。そんな時は、pwd コマンドで自分の現在いる場所を確認する事ができます。
# pwd
/usr/local/src/httpd-2.0.48/support |
● pwd コマンド構文
|
pwd
|
|
12.空のファイルの作成 [ touch ]
touch コマンドは、指定されたファイルが存在しなければ、空のファイルを作成します。
存在すれば指定されたファイルについて、アクセス時刻と更新時刻を現在の時刻に変更します。任意の時間に変更することもできます。
● touch コマンド構文
|
touch [オプション] [ファイル名]
|
|
● touch コマンドオプション
|
-a |
最終アクセス時刻のみ変更する |
|
-m |
最終更新時刻のみ変更する |
|
-t |
タイムスタンプを変更する |
|
13.ファイルへの出力 [ tee ] [ > ]
tee コマンドは、標準入力から読み込んだ内容を標準出力及び指定したファイルに出力します。以下の例では、ls -la の実行結果が標準出力され、また、file4 にも出力されます。
今度は、標準出力はせずに、file5 にのみ、ls -la の実行結果を出力します。
● tee コマンド構文
|
tee [オプション] [ファイル名]
|
|
● tee コマンドオプション
|
-a |
指定した出力先のファイルが既に存在する場合に、上書きではなく追記する |
|
>(リダイレクト)を使用して追記する場合には、>> と指定します。
14.ファイル形式を出力 [ file ]
file コマンドは、ファイル形式を調べるためのコマンドです。テキストファイルの場合は、文字コードが表示されます。
fileはファイルの内容を見て表示しています。
$ file test1.txt
test1.txt: ASCII text
|
下は、findの実行ファイルの形式を表示したところです。
$ file /usr/bin/find
/usr/bin/find: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=5af2fc2eb5f08b1a8f9e87053d29edf7e3a4eaa3, stripped, too many notes (256)
|
● file コマンド構文
|
file [オプション] [ファイル名1] [ファイル名2] [ファイル名3]
|
|
● file コマンドオプション
|
-f, --files-from リスト |
検査するファイルの名前をリストファイルから読み込む |
|
-L, --dereference |
シンボリックリンクの参照先を調べる |
|
-z, --uncompress |
圧縮ファイルの中も検査する |
|
-b, --brief |
出力行の最初にファイル名を表示しない(簡易モード) |
|
-N, --no-pad |
出力を整列するためのファイル名への空白の追加を行わない |
|
シンボリックリンク先を確認するには、-L オプションを使う。
$ file /usr/bin/sh
/usr/bin/sh: symbolic link to bash ←shはbashのシンボリックリンク
$ file -L /usr/bin/sh
/usr/bin/sh: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=d6860cc6bde275862ffc23fd60a7c1e2507c818f, stripped
$ file /usr/bin/bash
/usr/bin/bash: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=d6860cc6bde275862ffc23fd60a7c1e2507c818f, stripped
↑ 同じもの
|
b. ファイルの圧縮・解凍コマンド
c. ファイルアーカイブ操作コマンド
z. 出題範囲概要